package com.github.satant.job.common.biz;

import com.github.satant.job.common.msg.TableResultResponse;
import com.github.satant.job.common.util.Query;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

/**
 * @Author: dear_satant
 * @Date: 2018/6/24 13:48
 * @Description:
 */
public  interface BaseBiz<M extends Mapper<T>, T> {

/**
 * @author: dear_satant
 * @description: 设置mapper对象
 * @param mapper dao层的mapper对象
 */
   void setMapper(M mapper) ;

  /**
   * 根据传入的entity对象查找单个对象
   * @param entity
   * @return
   */
   T selectOne(T entity) ;

  /**
   * 根据传入的if查找对象
   * @param id
   * @return
   */
   T selectById(Object id) ;

  /**
   * 根据传入的entity中的属性查找多个对象
   * @param entity
   * @return
   */
   List<T> selectList(T entity) ;

  /**
   * 查找所有对象
   * @return
   */
   List<T> selectListAll() ;

  /**
   * 根据传入的entity对象查询符合条件的数量
   * @param entity
   * @return
   */
   Long selectCount(T entity) ;

  /**
   * 插入对象中的所有字段
   * @param entity
   */
   void insert(T entity) ;

  /**
   * 插入对象中的非空字段
   * @param entity
   */
   T insertSelective(T entity) ;

  /**
   * 根据传入的entity对象中的属性删除记录
   * @param entity
   */
   void delete(T entity);

  /**
   *  根据id删除记录
   * @param id
   */
   void deleteById(Object id) ;


  /**
   *  根据传入的entity中的id更新entity中的所有字段
   * @param entity
   */
   void updateById(T entity) ;

  /**
   *  根据传入的entity中的id更新entity中的所有非空字段
   * @param entity
   */
   void updateSelectiveById(T entity);

  /**
   *  根据Example条件查找对象
   * @param example
   * @return
   */
   List<T> selectByExample(Object example);

  /**
   *  根据Example条件查找总记录数
   * @param example
   * @return
   */
   int selectCountByExample(Object example) ;

  /**
   *  根据传入的Query分页查询对象
   * @param query
   * @return
   */
   TableResultResponse<T> selectByQuery(Query query);

  /**
   *
   * @param query 查询参数
   * @param orderField 排序字段
   * @param orderType 排序方式
   * @return
   */
  TableResultResponse<T> selectByQueryWithOrder(Query query, String orderField, String orderType);
}
